class: inverse,left, middle background-image: url(background.png) background-size: cover <img src="data:image/png;base64,#LOGO_DIPLOMADO.png" width="500px"/> ##Módulo 2: Análisis espacial y Percepción remota satelital óptica ### Pre-procesamiento satelital II MatÃas Pérez Evens <br> matias.perez@pucv.cl<br> .large[<b><a href="https://www.pucv.cl/uuaa/site/edic/base/port/labgrs.html">LabGRS</a> | Noviembre 2025</b>] <br> --- class: center,middle background-image: url(data:image/png;base64,#labgrs_logo.png) background-size: 35% --- ## Contenidos .pull-left[ * Combinaciones de bandas. **✔** * Calibración radiométrica. **✔** * Corrección atmosférica. **✔** * Filtros de calidad de la información satelital. * Compensación topográfica por iluminación. ] .pull-right[ <img src="data:image/png;base64,#https://raw.githubusercontent.com/allisonhorst/stats-illustrations/main/rstats-artwork/r_rollercoaster.png" width="650px"/> ] --- ### Filtros de calidad de la información: Quality Assessment * <a href="https://d9-wret.s3.us-west-2.amazonaws.com/assets/palladium/production/s3fs-public/media/files/LSDS-1619_Landsat8-9-Collection2-Level2-Science-Product-Guide-v6.pdf">**Manual de uso Landsat 8-9 Nivel 2**</a> <center><img src="data:image/png;base64,#qa_landsat.jpg" height="450px" /></center> --- ### Filtros de calidad de la información: Quality Assessment #### Valores posibles por clase de bits# <b>1 bit:</b> 2 valores posibles * 0 → 0 * 1 → 1 <b>2 bits:</b> 4 valores posibles * 00 → 0 * 01 → 1 * 10 → 2 * 11 → 3 <b>4 bits:</b> 16 valores posibles * 0000 → 0 * 0001 → 1 * [...] * 1111 → 15 --- ### Filtros de calidad de la información: Quality Assessment #### Valores posibles por clase de bits# <b>8 bits:</b> 256 valores posibles * 00000000 → 0 * [...] * 11111111 → 255 <b>...</b> <b>16 bits:</b> 65536 valores posibles * 0000000000000000 → 0 * [...] * 1111111111111111 → 65535 --- ### Filtros de calidad de la información: Quality Assessment <center><img src="data:image/png;base64,#qa_values.jpg" height="500px" /></center> --- ### Filtros de calidad de la información: Quality Assessment ``` r # librerias necesarias library(terra) # Calibración radiometrica: Escalado de datos de DN a Reflectancia L8_SR <- rast("L8_SR_VALPARAISO_C02.tif") * 0.0000275 + -0.2 QA <- rast("QA_PIXEL_BAND_L8_SR_VALPARAISO_C02.tif") # banda Quality Assessment plotRGB(L8_SR, r = 4, g = 3, b = 2, stretch = "hist") # visualización ``` <center><img src="data:image/png;base64,#lc_rgb.jpeg" height="300px" /></center> --- ### Filtros de calidad de la información: Quality Assessment ``` r ### Filtro Qa por valores del pixel -------- # QA High conf Cloud --- QA_nube_high <- QA QA_nube_high[QA_nube_high != 22280] <- NA plot(QA_nube_high, add=T, col = "red") #QA High conf cloud shadow --- QA_cloud_shadow <- QA QA_cloud_shadow[QA_cloud_shadow != 23888] <- NA plot(QA_cloud_shadow, add = T, col = "cyan") #QA High conf Snow/Ice --- QA_snow_high <- QA QA_snow_high[QA_snow_high != 30048] <- NA plot(QA_snow_high, add = T, col = "yellow") ``` --- ### Filtros de calidad de la información: Quality Assessment <b><span style="background-color: red;">Nubes,</span> <span style="background-color: cyan;">Sombra de nubes</span> y <span style="background-color: yellow;">Nieve/hielo.</span></b> <center><img src="data:image/png;base64,#lc_qa_classes.jpeg" height="500px" /></center> --- ### Filtros de calidad de la información: Quality Assessment ``` r # Crear objeto con los QA que quiero eliminar: qa_list <- c(22280, 30048, 23888) L8_SR_QA_list <- L8_SR L8_SR_QA_list[QA %in% qa_list] <- NA plotRGB(L8_SR_QA_list, r = 4, g= 3, b= 2, stretch = "hist") # visualización #writeRaster(L8_SR_QA_list, filename = "QA_MASK_L8_SR_v1.tif", overwrite = T) ``` --- ### Filtros de calidad de la información: Quality Assessment Imagen sin nubes, nieve/hielo ni sombras de nubes. <center><img src="data:image/png;base64,#lc_qa_list.jpeg" height="500px" /></center> --- ### Filtros de calidad de la información: Quality Assessment ``` r # Crear objeto SOLO con los QA que deseo conservar qa_value <- 21824 # Clear with low sets L8_SR_QA <- L8_SR L8_SR_QA[QA != qa_value] <- NA plotRGB(L8_SR_QA, r = 4, g= 3, b= 2, stretch = "hist") # visualización #writeRaster(L8_SR_QA, filename = "QA_MASK_L8_SR_v2.tif", overwrite = T) ``` --- ### Filtros de calidad de la información: Quality Assessment Imagen **solo con pixeles** de condición <b>Clear with lows set</b>. *(Revisar tabla)* <center><img src="data:image/png;base64,#lc_qa_clear.jpeg" height="500px" /></center> --- ### Filtros de calidad de la información: Quality Assessment Comparación **sin Quality Assessment** (izq) <b>vs</b> **Clear with lows set** (der) .pull-left[<img src="data:image/png;base64,#lc_rgb.jpeg" height="500px" /></center>] .pull-right[<img src="data:image/png;base64,#lc_qa_clear.jpeg" height="500px" /></center>] --- ### Compensación topográfica por iluminación <center><img src="data:image/png;base64,#comp_topo.jpg" height="500px" /></center> --- ### Compensación topográfica por iluminación <center><img src="data:image/png;base64,#sun_angles.jpg" height="500px" /></center> --- ### Compensación topográfica por iluminación .pull-left[ Compensa la energÃa electromagnética que es reflejada por superficies irregulares (topografÃa) y es captada por el sensor. Las condiciones del terreno pueden generar grandes variaciones en la reflectancia de ciertos objetos en superficie. Contamos con una amplia cantidad de métodos. Sin embargo, <b>no existe un consenso general de cual método es mejor respecto a los demás.</b> El metodo a elegir dependera de **la rugosidad de la superficie** de estudio, los angulos del **azimuth y zenith del sol** y la temporada (estacion del año) en la cual nos encontremos trabajando. ] .pull-right[ <img src="data:image/png;base64,#topo_solar.jpg" height="400px"/> ] --- ### Compensación topográfica por iluminación Dentro de los métodos de compensación basados en el uso de modelos de elevación digital, podemos encontrar 2 grandes grupos. 1. **Metodos Lambertianos** * Coseno * Coseno mejorado 2. **Metodos no lambertianos** * Minnaert * Minnaert slope * SCS <p align = "center"> <img src="data:image/png;base64,#sun_sat.jpg" height="200px"/> </p> --- ### Compensación topográfica por iluminación Estos métodos se basan en la creación de un **modelo de iluminación** el cual considera la pendiente, orientación y posición del sol para determinar la condición de la luz en el área de interés. <center><img src="data:image/png;base64,#il_topo.jpg" height="350px" /></center> --- ### Compensación topográfica por iluminación ``` r ## librerias necesarias library(tidyverse) library(terra) ## Compensación topográfica de la iluminación. poly <- vect("poly.shp") # Abrir imagen Landsat usada anteriormente # IMPORTANTE: debe estar en reflectancia L8_crop <- L8_SR %>% crop(poly) %>% mask(poly) plotRGB(L8_crop, r = 4, g= 3, b= 2, stretch = "lin") DEM <- rast("DEM_zonaInteres.tif") %>% crop(poly) %>% mask(poly) %>% resample(L8_crop) plot(DEM) #visualización ``` --- ### Compensación topográfica por iluminación <center><img src="data:image/png;base64,#sr_dem.jpg" height="500px" /></center> --- ### Compensación topográfica por iluminación <b> Coseno Teillet et al. 1982 </b> ``` r ## Modelo de iluminación ---- sunazimuth <- 45.90472755 * pi/180 sunzenith <- (90-44.39053871) * pi/180 slope <- terra::terrain(DEM, v = "slope", unit = "radians") aspect <- terra::terrain(DEM, v = "aspect", unit = "radians") IL <- cos(slope)*cos(sunzenith) + sin(slope)*sin(sunzenith)*cos(sunazimuth - aspect) plot(IL) ``` --- ### Compensación topográfica por iluminación <center><img src="data:image/png;base64,#mod_ilu.jpg" height="500px" /></center> --- ### Compensación topográfica por iluminación <b> Coseno Teillet et al. 1982 </b> ``` r ## Metodo coseno 1982 --- TopoCos <- L8_crop*(cos(sunzenith)/IL) ``` <center><img src="data:image/png;base64,#coseno_ilu.jpg" height="300px" /></center> --- ### Compensación topográfica por iluminación <center><img src="data:image/png;base64,#compare_ilu.jpg" height="500px" /></center> --- ### Compensación topográfica por iluminación <b> Coseno mejorado Civco et al. 1989 </b> Se presenta una mejora respecto al modelo de iluminación considerando el valor promedio para el área de estudio, esto permite generar una compensación más homogénea. ``` r ## COSENO TOPO CORRECTION ---- IL_mean <- terra::global(IL, "mean", na.rm = T) IL_mean <- IL_mean$mean TopoCos_imp <- L8_crop+(L8_crop*(IL_mean - IL)/ IL_mean) ``` <center><img src="data:image/png;base64,#civco.jpg" height="300px" /></center> --- ### Comparación visual: compensación topográfica por iluminación <center><img src="data:image/png;base64,#comparacion_visual.jpg" height="500px" /></center> --- ### Comparación de reflectancias superficiales con los diferentes metodos. ``` r # comparacion reflectancias -- il_df <- IL %>% as.data.frame(xy = T) px <- matrix(data = c(284018.749,6315530.393), nrow = 1, ncol = 2) reflectancia_l8_normal <- terra::extract(L8_crop, px) %>% t %>% as.data.frame() reflectancia_l8_normal <- tibble::rownames_to_column(reflectancia_l8_normal, "bands") reflectancia_cos <- terra::extract(TopoCos, px) %>% t %>% as.data.frame() reflectancia_cos_imp <- terra::extract(TopoCos_imp, px) %>% t %>% as.data.frame() df <- reflectancia_l8_normal %>% cbind(reflectancia_cos$V1, reflectancia_cos_imp$V1) names(df) <- c("bandas", "SR", "SR_coseno", "SR_coseno_imp") ``` --- ### Comparación de reflectancias superficiales con los diferentes metodos. ``` r ## Plot simple de la reflectancia superficial corregida por 2 metodos --------- plot( x = df$SR, type = "l", xlab = "L08 bands (costal - SWIR2)", # tipo de grafico "l" lineas ylab = "surface reflectance (%)", col = "red", lwd = 2, ylim = c(0, 1), main = "Comparacion SR diferentes métodos de compensación" ) lines(x = df$SR_coseno, type = "l", col = "blue", lwd = 2) # agregar otra linea. lines(x = df$SR_coseno_imp, type = "l", col = "green", lwd = 2) # agregar otra linea. legend( x = "topright", # posición de la leyenda legend = c("SR", "SR cos", "SR impcos"), # etiquetas col = c("red", "blue", "green"), # colores de la linea lwd = 2 # ancho de la linea ) ``` --- ### Comparación de reflectancias superficiales con los diferentes metodos. <center><img src="data:image/png;base64,#comparacion_sr.jpg" height="500px" /></center> --- ### BibliografÃa <br> Civco, D. L. (1989). Topographic normalization of Landsat Thematic Mapper digital imagery. Photogrammetric engineering and remote sensing, 55(9), 1303-1309. <br> Allen, Tom. (2000). Topographic Normalization of Landsat Thematic Mapper Data in Three Mountain Environments. Geocarto International. 15. 10.1080/10106040008542148. <br> Riaño, David & Chuvieco, Emilio & Salas, Javier & Aguado, Inmaculada. (2003). Assessment of different topographic corrections in Landsat-TM data for mapping vegetation types (2003). Geoscience and Remote Sensing, IEEE Transactions on. 41. 1056 - 1061. 10.1109/TGRS.2003.811693. --- class: middle 